/*
 * 官网地站:http://www.mob.com
 * 技术支持QQ: 4006852216
 * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）
 *
 * Copyright (c) 2013年 mob.com. All rights reserved.
 */

package cn.sharesdk.onekeyshare.themes.classic;

import java.util.ArrayList;
import java.util.HashMap;

import android.graphics.drawable.ColorDrawable;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.onekeyshare.OnekeySharePage;
import cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;
import cn.sharesdk.onekeyshare.themes.classic.FriendAdapter.Following;

import com.mob.tools.gui.PullToRequestView;
import com.mob.tools.utils.R;

/**
 * 编辑界面，@好友时，弹出的好友列表
 */
public abstract class FriendListPage extends OnekeySharePage implements OnClickListener, OnItemClickListener {
    private static final int DESIGN_LEFT_PADDING = 40;

    private Platform platform;
    private LinearLayout llPage;
    private RelativeLayout rlTitle;
    private TextView tvCancel;
    private TextView tvConfirm;
    private FriendAdapter adapter;
    private int lastPosition = -1;
    /**
     * 展示好友列表时，已选择要‘@’的好友个数
     */
    private int checkNum = 0;

    public FriendListPage(OnekeyShareThemeImpl impl) {
        super(impl);
    }

    public void setPlatform(Platform platform) {
        this.platform = platform;
    }

    public void onCreate() {
        activity.getWindow().setBackgroundDrawable(new ColorDrawable(0xfff3f3f3));

        llPage = new LinearLayout(activity);
        llPage.setOrientation(LinearLayout.VERTICAL);
        activity.setContentView(llPage);

        rlTitle = new RelativeLayout(activity);
        float ratio = getRatio();
        int titleHeight = (int) (getDesignTitleHeight() * ratio);
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, titleHeight);
        llPage.addView(rlTitle, lp);
        initTitle(rlTitle, ratio);

        View line = new View(activity);
        LinearLayout.LayoutParams lpline = new LinearLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, (int) (ratio < 1 ? 1 : ratio));
        line.setBackgroundColor(0xffdad9d9);
        llPage.addView(line, lpline);

        FrameLayout flPage = new FrameLayout(getContext());
        LinearLayout.LayoutParams lpFl = new LinearLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        lpFl.weight = 1;
        flPage.setLayoutParams(lpFl);
        llPage.addView(flPage);

        // 关注（或朋友）列表
        PullToRequestView followList = new PullToRequestView(getContext());
        FrameLayout.LayoutParams lpLv = new FrameLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        followList.setLayoutParams(lpLv);
        flPage.addView(followList);

        adapter = new FriendAdapter(this, followList);
        adapter.setPlatform(platform);
        adapter.setRatio(ratio);
        adapter.setOnItemClickListener(this);
        followList.setAdapter(adapter);

        // 请求数据
        followList.performPullingDown(true);
    }

    protected abstract float getRatio();

    protected abstract int getDesignTitleHeight();

    private void initTitle(RelativeLayout rlTitle, float ratio) {
        tvCancel = new TextView(activity);
        tvCancel.setTextColor(0xff3b3b3b);
        tvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
        tvCancel.setGravity(Gravity.CENTER);
        int resId = R.getStringRes(activity, "ssdk_oks_cancel");
        if (resId > 0) {
            tvCancel.setText(resId);
        }
        int padding = (int) (DESIGN_LEFT_PADDING * ratio);
        tvCancel.setPadding(padding, 0, padding, 0);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
        rlTitle.addView(tvCancel, lp);
        tvCancel.setOnClickListener(this);

        TextView tvTitle = new TextView(activity);
        tvTitle.setTextColor(0xff3b3b3b);
        tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);
        tvTitle.setGravity(Gravity.CENTER);
        resId = R.getStringRes(activity, "ssdk_oks_contacts");
        if (resId > 0) {
            tvTitle.setText(resId);
        }
        lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
        lp.addRule(RelativeLayout.CENTER_IN_PARENT);
        rlTitle.addView(tvTitle, lp);

        tvConfirm = new TextView(activity);
        tvConfirm.setTextColor(0xffff6d11);
        tvConfirm.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
        tvConfirm.setGravity(Gravity.CENTER);
        resId = R.getStringRes(activity, "ssdk_oks_confirm");
        if (resId > 0) {
            tvConfirm.setText(resId);
        }
        tvConfirm.setPadding(padding, 0, padding, 0);
        lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
        lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        rlTitle.addView(tvConfirm, lp);
        tvConfirm.setOnClickListener(this);
    }

    public void onClick(View v) {
        if (v.equals(tvCancel)) {
            finish();
        } else {
            ArrayList<String> selected = new ArrayList<String>();
            for (int i = 0, size = adapter.getCount(); i < size; i++) {
                if (adapter.getItem(i).checked) {
                    selected.add(adapter.getItem(i).atName);
                }
            }

            HashMap<String, Object> res = new HashMap<String, Object>();
            res.put("selected", selected);
            res.put("platform", platform);
            setResult(res);
            finish();
        }
    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if ("FacebookMessenger".equals(platform.getName())) {
            if (lastPosition >= 0) {
                Following lastFollwing = adapter.getItem(lastPosition);
                lastFollwing.checked = false;
            }
            lastPosition = position;
        }
        Following following = adapter.getItem(position);
        following.checked = !following.checked;

        if (following.checked) {
            checkNum++;
        } else {
            checkNum--;
        }

        updateConfirmView();
        adapter.notifyDataSetChanged();
    }

    private void updateConfirmView() {
        int resId = R.getStringRes(activity, "ssdk_oks_confirm");
        String confirm = "Confirm";
        if (resId > 0) {
            confirm = getContext().getResources().getString(resId);
        }
        if (checkNum == 0) {
            tvConfirm.setText(confirm);
        } else if (checkNum > 0) {
            tvConfirm.setText(confirm + "(" + checkNum + ")");
        }
    }

}
